package cn.edu.tju.se.auth.controller;

import cn.edu.tju.se.auth.enity.Customer;
import cn.edu.tju.se.auth.service.CustomService;
import cn.edu.tju.se.auth.service.GoodsService;
import cn.edu.tju.se.auth.service.ShopcartService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

@RestController
@RequestMapping(value = "score")
public class ScoreController {

    /*
    * 注：
    * 购买商品时默认优先使用积分
    * 若积分不够再现金支付
    * 积分购买时不返还购物积分
     */

    @Autowired
    private GoodsService goodsService;

    @Autowired
    private CustomService customService;

    @Autowired
    private ShopcartService shopcartService;


    // 设定获取特定用户的积分
    @GetMapping(path = "getCustomScore")
    public List<?> getUserScore(String username){
        return customService.getCustomListScore(username);
    }

    // 在用户购物的时候，会增加用户的积分
    @GetMapping(path = "addCustomScore")
    public void addUserScore(String goodname, String username){
        // 获取可以增加的积分
        // 暂不设置获取积分上限
        Integer addScore = goodsService.goodScore(goodname) * shopcartService.goodNum(goodname);
        // 获取用户的原先积分
        Integer userScore = customService.getCustomIntegerScore(username);
        // 得出用户现有的积分
        Integer nowScore = addScore + userScore;
        // 按照用户名将数据更新 (根据id)
        Customer customer = customService.getCustomer(username);
        customer.setScore(nowScore);
        customService.addCustomer(customer);
    }

    // 用户兑换商品时，会减少用户的积分
    @GetMapping(path = "deleteCustomScore")
    public void deleteUserScore(String goodname, String username){
        // 获取可以增加的积分
        Integer addScore = goodsService.exScore(goodname) * shopcartService.goodNum(goodname);
        // 获取用户的原先积分
        Integer userScore = customService.getCustomIntegerScore(username);
        // 得出用户现有的积分
        Integer nowScore = userScore - addScore;
        if(nowScore > 0){
            // 按照用户名将数据更新 (根据id)
            // ljx注：个人感觉，
            // 在用积分的时候，分析积分是否够用，才有实际用，(￣ω￣;)
            // 这里比较会影响结果，不利于实际操作。
            // 例：用户用积分购买商品但积分并不够，
            // 调用了本方法却并没有扣除积分，还购买成功了，[・_・?]
            // 这显然不符合实际。
            // 积分足够才是使用本方法的前提
            Customer customer = customService.getCustomer(username);
            customer.setScore(nowScore);
            customService.addCustomer(customer);
        }

    }

}
